﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TiEntityObject.Transport;
using System.IO;
using System.Text.RegularExpressions;

namespace TI_EntityLib.TiEntityObjects.DayLog
{
    public class DayStatistic
    {
        public class DocumentMetaStatistic
        {
            public int IsHaveKeyWords { get; set;}
            public int IsDownload{get;set;}
            public int IsIndexed { get; set;}
            public int dmAll  { get; set; }
            
        }


        private DateTime day;
        private List<string> fileList = new List<string>();

        public  DayStatistic(DateTime Day)
        { 
            day =Day;
            //сформировать список файлов 
            string [] childDayFolders= Directory.GetDirectories(TransportConfig.Instance.FtpRoot+@"\" +day.ToShortDateString ());
            string[] folderFiles = null;
            foreach (string i in childDayFolders)
            {
                folderFiles = Directory.GetFiles(i);
                fileList.AddRange(folderFiles);
            }
            //в базе взять статистику по загрузке файлов
            DocumentMetaStatistic stat = (DocumentMetaStatistic)Helper.MongoTools.Instance.GetEntity<DocumentMetaStatistic>("getDocumentMetaStatistic("+Helper.Time.GetDateInMS(day) +");");
            this.DMetaStatistic = stat;
        }

        public DocumentMetaStatistic DMetaStatistic { get; set; }
        
        private int GetFileTypeCount(string pattern) {
        int r=0;
        Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
        foreach (string i in fileList)
        {   
            MatchCollection matches = rgx.Matches(i);
            if (matches.Count > 0)
                ++r;
        }
        return r;
        }

        #region статистика по файлам
        //все транспортники
        public int All { get { return fileList.Count; } }

        public int Zip { get { return GetFileTypeCount(@"zip$"); } }

        //все обработанные 
        public int Processed { get { return ProcessedOk + ProcessedEmpty; } }

        public int ProcessedOk { get { return GetFileTypeCount(@"OK$"); } }

        public int ProcessedEmpty { get { return GetFileTypeCount(@"EMPTY$"); } }

        public int ProcessedErr { get { return GetFileTypeCount(@"ProcessedERR$"); } }

        //Необработанные
        public int NotProcessed { get { return GetFileTypeCount(@"xml$"); } }
        #endregion
    }

}
